home *** CD-ROM | disk | FTP | other *** search
/ Amiga Format CD 38 / Amiga Format CD38 (1999-03-15)(Future Publishing)(GB)(Track 1 of 3)[!][issue 1999-04].iso / -in_the_mag- / reader_requests / dice_v3.15 / lib / amigalib / createtask.c < prev    next >
C/C++ Source or Header  |  1999-01-26  |  1KB  |  58 lines

  1.  
  2. /*
  3.  *  CREATETASK.C
  4.  *
  5.  *    (c)Copyright 1992-1997 Obvious Implementations Corp.  Redistribution and
  6.  *    use is allowed under the terms of the DICE-LICENSE FILE,
  7.  *    DICE-LICENSE.TXT.
  8.  *
  9.  *  in-memory:    [memList][stack][Task]
  10.  */
  11.  
  12. #include <exec/types.h>
  13. #include <exec/memory.h>
  14. #include <exec/tasks.h>
  15. #include <clib/exec_protos.h>
  16. #include <clib/alib_protos.h>
  17.  
  18. typedef struct MemList MemList;
  19. typedef struct Task    Task;
  20.  
  21. Task *
  22. CreateTask(name, pri, initPC, stackSize)
  23. unsigned char *name;
  24. long pri;
  25. APTR initPC;
  26. unsigned long stackSize;
  27. {
  28.     MemList *memList;
  29.     Task    *task = NULL;
  30.     long    totalSize;
  31.  
  32.     stackSize = (stackSize + 3) & ~3;
  33.     totalSize = sizeof(MemList) + sizeof(Task) + stackSize;
  34.  
  35.     if (memList = AllocMem(totalSize, MEMF_PUBLIC|MEMF_CLEAR)) {
  36.     memList->ml_NumEntries = 1;
  37.     memList->ml_ME[0].me_Addr = (APTR)(memList + 1);
  38.     memList->ml_ME[0].me_Length = totalSize - sizeof(MemList);
  39.  
  40.     task = (struct task *)memList + sizeof(MemList) + stackSize;
  41.     task->tc_Node.ln_Pri  = pri;
  42.     task->tc_Node.ln_Type = NT_TASK;
  43.     task->tc_Node.ln_Name = name;
  44.     task->tc_SPLower = (char *)memList + sizeof(MemList);
  45.     task->tc_SPUpper = (char *)task->tc_SPLower + stackSize;
  46.     task->tc_SPReg     = task->tc_SPUpper;
  47.     NewList(&task->tc_MemEntry);
  48.     AddTail(&task->tc_MemEntry, &memList->ml_Node);
  49.     if (AddTask(task, initPC, NULL) == 0) {
  50.         FreeEntry(memList);
  51.         task = NULL;
  52.     }
  53.     }
  54.     return(task);
  55. }
  56.  
  57.  
  58.